package user_api

import (
	"fastgin/global"
	"fastgin/middleware"
	"fastgin/models"
	"fastgin/utils/res"
	"fmt"

	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"gorm.io/gorm"
)

func (UserApi) DelUserView(c *gin.Context) {
	//这里其实可以不用判断,因为使用了路由中间件来判断,只有管理员才能删除用户
	cl := middleware.GetAuth(c)
	if cl.Claims.RoleID != 1 {
		logrus.Errorf("无权限")
		res.FailWithMsg("无权限", c)
		return
	}
	crs := middleware.GetBind[models.IDList](c)
	// 检查DelIDList中是否包含当前登录用户的ID
	for _, userID := range crs.IDList {
		if userID == cl.Claims.UserID {
			logrus.Errorf("不能删除当前登录用户")
			res.FailWithMsg("不能删除当前登录用户", c)
			return
		}
	}
	var userList []models.UserModel
	count := global.DB.Find(&userList, crs.IDList).RowsAffected
	if count == 0 {
		logrus.Errorf("不存在的用户")
		res.FailWithMsg("不存在的用户", c)
		return
	}
	err := global.DB.Transaction(func(tx *gorm.DB) error {
		//TODO: 此处采用了gorm事务 方便以后当删除用户表时也能关联着删除用户对应的其他信息表中的信息
		err := global.DB.Delete(&userList).Error
		if err != nil {
			logrus.Error(err)
			return err
		}
		return nil
	})
	if err != nil {
		logrus.Errorf("删除用户失败 %s", err)
		res.FailWithMsg("删除用户失败", c)
		return
	}
	logrus.Infof("共删除 %d 个用户", count)
	res.OkWithMsg(fmt.Sprintf("共删除 %d 个用户", count), c)
	return
}
